using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._Cartography._Features
{
    /// <summary>
    /// <para>Calculate Magnetic Components</para>
    /// <para>Computes the magnetic field at point locations for given date and altitude.</para>
    /// <para>计算给定日期和高度的点位置的磁场。</para>
    /// </summary>    
    [DisplayName("Calculate Magnetic Components")]
    public class CalculateMagneticComponents : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CalculateMagneticComponents()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The point features for which magnetic field values will be calculated.</para>
        /// <para>将计算磁场值的点要素。</para>
        /// </param>
        /// <param name="_altitude">
        /// <para>Altitude</para>
        /// <para>The elevation of the Input Features value including the linear unit. Do not use decimal degrees or unknown units. The default is 0 meters.</para>
        /// <para>输入要素值的高程，包括线性单位。不要使用十进制度或未知单位。默认值为 0 米。</para>
        /// </param>
        /// <param name="_date">
        /// <para>Date</para>
        /// <para>The date for which magnetic field values will be calculated. The date must be valid for the specified World Magnetic Model. The format must use two digits for the month, two digits for the day, and four digits for the year. The default is the system current date.</para>
        /// <para>计算磁场值的日期。该日期必须对指定的世界磁模型有效。格式必须使用两位数字表示月份，两位数字表示日期，四位数字表示年份。默认值为系统当前日期。</para>
        /// </param>
        /// <param name="_magnetic_component">
        /// <para>Magnetic Component</para>
        /// <para><xdoc>
        ///   <para>The magnetic component to calculate and the field to which the values will be written.</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>Component—The magnetic component to calculate.
        ///       <bulletList>
        ///         <bullet_item>Declination—The angle between magnetic north and true north. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Annual Drift—The annual rate of change in magnetic declination. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Inclination—The angle between a compass needle and the plane of the horizon. Inclination is also known as magnetic dip or the dip of the compass needle. This value varies by latitude.  </bullet_item><para/>
        ///         <bullet_item>Horizonatl—This value is calculated using north and east components. Horizontal is also known as Horizontal intensity, or H. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>East component—The easterly intensity of the geomagnetic field. East component is also known as Y. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>North component—The northerly intensity of the geomagnetic field. North component is also known as X. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Vertical intensity—The vertical intensity of the geomagnetic field. Vertical intensity is also known as Z. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Total intensity—This value is calculated using horizontal and vertical components. Total intensity is also known as F. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Grid variation—The angle between magnetic north and grid north. You must use the Lambert conformal conic projected coordinate system in the ArcMap data frame, in the geoprocessing environment, or in the input point data.  </bullet_item><para/>
        ///       </bulletList>
        ///       </bullet_item><para/>
        ///       <bullet_item>Field—The field to which calculated results are written.</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要计算的磁性分量和将值写入的磁场。</para>
        ///   <para>
        ///     <bulletList>
        /// <bullet_item>分量 （Component） - 要计算的磁性分量。
        ///       <bulletList>
        ///         <bullet_item>赤纬 - 磁北与真北之间的角度。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>年漂移 - 磁偏角的年变化率。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>倾角 - 罗盘指针与地平线平面之间的角度。倾角也称为磁倾角或罗盘针的倾角。此值因纬度而异。 </bullet_item><para/>
        ///         <bullet_item>水平 （Horizonatl） - 此值使用北向和向东分量进行计算。水平也称为水平强度或 H。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>东分量 - 地磁场的东向强度。东分量也称为 Y。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>North 分量 - 地磁场的偏北强度。North 分量也称为 X。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>垂直强度 - 地磁场的垂直强度。垂直强度也称为 Z。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>总强度 - 此值使用水平和垂直分量进行计算。总强度也称为 F。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>网格变化 - 磁北角和栅格北角之间的角度。必须在 ArcMap 数据框、地理处理环境或输入点数据中使用 Lambert 共角圆锥投影坐标系。 </bullet_item><para/>
        ///       </bulletList>
        ///       </bullet_item><para/>
        ///       <bullet_item>字段 - 将计算结果写入的字段。</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        public CalculateMagneticComponents(object _in_features, string? _altitude, object _date, object _magnetic_component)
        {
            this._in_features = _in_features;
            this._altitude = _altitude;
            this._date = _date;
            this._magnetic_component = _magnetic_component;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Calculate Magnetic Components";

        public override string CallName => "topographic.CalculateMagneticComponents";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _altitude, _date, _magnetic_component, _updated_features];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The point features for which magnetic field values will be calculated.</para>
        /// <para>将计算磁场值的点要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Altitude</para>
        /// <para>The elevation of the Input Features value including the linear unit. Do not use decimal degrees or unknown units. The default is 0 meters.</para>
        /// <para>输入要素值的高程，包括线性单位。不要使用十进制度或未知单位。默认值为 0 米。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Altitude")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string? _altitude { get; set; }


        /// <summary>
        /// <para>Date</para>
        /// <para>The date for which magnetic field values will be calculated. The date must be valid for the specified World Magnetic Model. The format must use two digits for the month, two digits for the day, and four digits for the year. The default is the system current date.</para>
        /// <para>计算磁场值的日期。该日期必须对指定的世界磁模型有效。格式必须使用两位数字表示月份，两位数字表示日期，四位数字表示年份。默认值为系统当前日期。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Date")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _date { get; set; }


        /// <summary>
        /// <para>Magnetic Component</para>
        /// <para><xdoc>
        ///   <para>The magnetic component to calculate and the field to which the values will be written.</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>Component—The magnetic component to calculate.
        ///       <bulletList>
        ///         <bullet_item>Declination—The angle between magnetic north and true north. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Annual Drift—The annual rate of change in magnetic declination. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Inclination—The angle between a compass needle and the plane of the horizon. Inclination is also known as magnetic dip or the dip of the compass needle. This value varies by latitude.  </bullet_item><para/>
        ///         <bullet_item>Horizonatl—This value is calculated using north and east components. Horizontal is also known as Horizontal intensity, or H. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>East component—The easterly intensity of the geomagnetic field. East component is also known as Y. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>North component—The northerly intensity of the geomagnetic field. North component is also known as X. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Vertical intensity—The vertical intensity of the geomagnetic field. Vertical intensity is also known as Z. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Total intensity—This value is calculated using horizontal and vertical components. Total intensity is also known as F. This value varies by location on the globe.  </bullet_item><para/>
        ///         <bullet_item>Grid variation—The angle between magnetic north and grid north. You must use the Lambert conformal conic projected coordinate system in the ArcMap data frame, in the geoprocessing environment, or in the input point data.  </bullet_item><para/>
        ///       </bulletList>
        ///       </bullet_item><para/>
        ///       <bullet_item>Field—The field to which calculated results are written.</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要计算的磁性分量和将值写入的磁场。</para>
        ///   <para>
        ///     <bulletList>
        /// <bullet_item>分量 （Component） - 要计算的磁性分量。
        ///       <bulletList>
        ///         <bullet_item>赤纬 - 磁北与真北之间的角度。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>年漂移 - 磁偏角的年变化率。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>倾角 - 罗盘指针与地平线平面之间的角度。倾角也称为磁倾角或罗盘针的倾角。此值因纬度而异。 </bullet_item><para/>
        ///         <bullet_item>水平 （Horizonatl） - 此值使用北向和向东分量进行计算。水平也称为水平强度或 H。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>东分量 - 地磁场的东向强度。东分量也称为 Y。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>North 分量 - 地磁场的偏北强度。North 分量也称为 X。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>垂直强度 - 地磁场的垂直强度。垂直强度也称为 Z。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>总强度 - 此值使用水平和垂直分量进行计算。总强度也称为 F。此值因地球上的位置而异。 </bullet_item><para/>
        ///         <bullet_item>网格变化 - 磁北角和栅格北角之间的角度。必须在 ArcMap 数据框、地理处理环境或输入点数据中使用 Lambert 共角圆锥投影坐标系。 </bullet_item><para/>
        ///       </bulletList>
        ///       </bullet_item><para/>
        ///       <bullet_item>字段 - 将计算结果写入的字段。</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Magnetic Component")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _magnetic_component { get; set; }


        /// <summary>
        /// <para>Updated Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_features { get; set; }


        public CalculateMagneticComponents SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}